package com.woniu.aimd.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ThreadLocalRandom;

public class OrderNumberUtil {

    // 定义日期格式化器 (yyyyMMdd)
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    // 定义时间格式化器 (HHmmss)
    private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HHmmss");

    /**
     * 生成指定前缀的订单编号
     *
     * @param prefix 订单号前缀 (例如 "CZ", "RENT")
     * @return 生成的订单编号字符串
     */
    public static String generateOrderNumber(String prefix) {
        // 1. 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();

        // 2. 格式化日期和时间部分
        String datePart = now.format(DATE_FORMATTER);
        String timePart = now.format(TIME_FORMATTER);

        // 3. 生成随机数部分
        // 随机数部分1: 生成 0 到 9999 之间的随机数 (4位数)
        int randomNum1 = ThreadLocalRandom.current().nextInt(0, 10000);
        // 使用 String.format 格式化为4位，不足则前面补0
        String randomPart1 = String.format("%04d", randomNum1);

        // 随机数部分2: 生成 0 到 99999 之间的随机数 (5位数)
        int randomNum2 = ThreadLocalRandom.current().nextInt(0, 100000);
        // 使用 String.format 格式化为5位，不足则前面补0
        String randomPart2 = String.format("%05d", randomNum2);

        // 4. 拼接所有部分
        // 使用 String.join 更简洁地用下划线连接各部分
        return String.join("_", prefix, datePart, timePart, randomPart1, randomPart2);

        /* 或者使用 StringBuilder 拼接：
        StringBuilder sb = new StringBuilder();
        sb.append(prefix).append("_");
        sb.append(datePart).append("_");
        sb.append(timePart).append("_");
        sb.append(randomPart1).append("_");
        sb.append(randomPart2);
        return sb.toString();
        */
    }

    // 主方法用于测试
    public static void main(String[] args) {
        System.out.println("Generating order numbers:");
        System.out.println(generateOrderNumber("CZ"));
        System.out.println(generateOrderNumber("RENT"));
        System.out.println(generateOrderNumber("ORDER"));
        // 生成几个看看效果
        for (int i = 0; i < 5; i++) {
            System.out.println(generateOrderNumber("CZ"));
        }
    }

}
